package com.ruoyi.hospital.mapper;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.hospital.domain.Schedules;
import io.lettuce.core.dynamic.annotation.Param;
import org.apache.ibatis.annotations.Mapper;

/**
 * 排班信息Mapper接口
 *
 * @author xiaozhao
 * @date 2025-07-03
 */
@Mapper
public interface SchedulesMapper extends BaseMapper<Schedules>
{
    /**
     * 查询排班信息
     *
     * @param scheduleId 排班信息主键
     * @return 排班信息
     */
    public Schedules selectSchedulesByScheduleId(Long scheduleId);

    /**
     * 查询排班信息列表
     *
     * @param schedules 排班信息
     * @return 排班信息集合
     */
    public List<Schedules> selectSchedulesList(Schedules schedules);

    /**
     * 新增排班信息
     *
     * @param schedules 排班信息
     * @return 结果
     */
    public int insertSchedules(Schedules schedules);

    /**
     * 修改排班信息
     *
     * @param schedules 排班信息
     * @return 结果
     */
    public int updateSchedules(Schedules schedules);

    /**
     * 删除排班信息
     *
     * @param scheduleId 排班信息主键
     * @return 结果
     */
    public int deleteSchedulesByScheduleId(Long scheduleId);

    /**
     * 批量删除排班信息
     *
     * @param scheduleIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSchedulesByScheduleIds(Long[] scheduleIds);

    /**
     * 更新号源数量的SQL映射
     */
    int updateQuota(@Param("doctorId") Long doctorId,
                    @Param("appointmentDate") Date appointmentDate,
                    @Param("timeSlot") String timeSlot,
                    @Param("change") int change);

    /**
     * 根据科室ID和就诊日期查询该科室医生的值班信息
     * @param deptId 科室ID
     * @param date 就诊日期
     * @return 排班信息集合
     */
    List<Schedules> selectSchedulesByDeptIdAndDate(@Param("deptId") Long deptId, @Param("date") Date date);
}
